home *** CD-ROM | disk | FTP | other *** search
- unit Uuseisam;
-
-
- interface
-
-
- USES Filer, UToolDll, isamtool;
-
- procedure DIEE; { Fehlerkontrolle / Displays errormessage}
- Procedure DIE;
- function IA:boolean; {Testet, ob Dialog-Meldung vorliegt und löscht sie
- tests and deletes dialog-message}
- function NotFound:boolean; {Testet, ob bei letzter Op. "nicht gef." herauskam
- true, if last skip failed}
-
- const Isamwsnr : Longint = 1;
- MySAVE : Boolean = FALSE;
-
- var
- SatzNoAngel : longint;
- IsamFehler : Integer Absolute IsamError;
- InitCount : Integer;
-
-
-
- type
- KeyProc = Function{(var DSatz;KeyNr:INTEGER):String;}
- ( Var DSatz;
- KeyNr : Word ) : IsamKeyStr;
- ChangeProc = Function(var DatOld,DatNew;Len:word):boolean;
-
- PROCEDURE EXITIsam; { releases memory, when leaving ISAM}
- Function INITIsam(Netz:NetSupportType) : Boolean;
- { checks memory and inits ISAM}
-
- PROCEDURE CLEARKEY(VAR IFBPtr : ISAMFILEBLOCKPTR;KEY: INTEGER);
- {Setzt den Datensatzzeiger auf den 1. Schlüssel von Key
- Record-Pointer is set to first position
- IFBPtr : Dateivariable
- Key : Keynummer
- }
-
- PROCEDURE READLOCK(VAR IFBPtr : ISAMFILEBLOCKPTR);
- {Setzt ein READLOCK auf die Datei
- IFBPtr : Dateivariable
- }
- PROCEDURE LOCK(VAR IFBPtr : ISAMFILEBLOCKPTR);
- {Setzt ein LOCK auf die Datei
- IFBPtr : Dateivariable
- }
- PROCEDURE UNLOCK(VAR IFBPtr : ISAMFILEBLOCKPTR);
- {Hebt den READLOCK auf
- IFBPtr : Dateivariable
- }
-
-
- procedure SatzLesen (Var IFBPtr : IsamFileBlockPtr;RefNr:longint;
- var Ziel,Dup);
- {Liest einen Satz aus der angegebenen Isam-Datei.
- reads record form isam-table
- IFBPtr : Dateivariable / file-pointer
- RefNr : Datensatznummer des zu lesenden Satzes
- ->Record-Number
- Ziel : Variable, in der der Satz gespeichert werden soll
- variable, where record is stored
- Dup : muß vom selben Typ wie Ziel sein. Wird von den Schreibprozeduren
- verwendet, um festzustellen, ob der Satz inzwischen verändert
- wurde. Darf daher nicht von Hand verändert werden.
- ->same type as ZIEL to check whether record is changed
- by other user.
-
- Bitte anschließend IsamOK beachten.
- Fehlermöglichkeiten: wie bei GetNetRec.
- }
-
- procedure SatzAendern(Var IFBPtr:IsamFileBlockPtr;RefNr:longint;
- Var Quelle,Dup;Keys:KeyProc;var OK:boolean);
- {Schreibt einen geänderten Satz zurück in die Isam-Datei.
- saves changed record into isamfile.
- IFBPtr : Dateivariable
- RefNr : Datensatznummer des zurückzuschreibenden Satzes
- -> record-number
- Quelle : zu schreibender Satz
- -> record to store
- Dup : muß das von SatzLesen erzeugte Duplikat des alten Satzes enthalten
- -> duplicate of record, to check for changes by other users.
- Keys : Zeiger auf eine Funktion, die die Datensatzschlüssel ermittelt.
- -> pointer to KEYPROC
- (s. Anmerkungen zu "type KeyProc" weiter oben.)
- OK : enthält OK nach der Ausführung FALSE, so konnte nicht geschrieben
- werden, weil der Satz inzwischen verändert wurde oder weil das Än-
- dern einen doppelten Hauptschlüssel zur Folge hätte.
- -> true if record could be saved, false if record was changed by
- other user.
- Bitte anschließend IsamOk und OK beachten.
- Fehlermöglichkeiten: wie bei LockFileBlock, GetNetRec, PutNetRec,
- DeleteKey, AddKey, UnlockFile sowie siehe OK.
-
- }
-
- procedure SatzAnlegen(Var IFBPtr:IsamFileBlockPtr;
- var Quelle;Keys:KeyProc);
- {Legt einen Satz an.
- -> saves new record to isamfile.
-
- IFBPtr : Dateivariable
- Quelle : zu schreibender Satz
- -> record, that is to be saved
- Keys : s. SatzAendern, type KeyProc
-
- Bitte anschließend IsamOK beachten.
- Fehlermöglichkeiten: wie bei LockFileBlock, AddNetRec, AddKey,
- UnlockFile.
-
- }
-
-
- procedure Satzloeschen(Var IFBPtr:IsamFileBlockPtr;RefNr:longint;
- var Dup;Keys:KeyProc;var OK:boolean);
- {Löscht einen Satz.
- -> deletes record described by record-number
-
- IFBPtr : Dateivariable
- RefNr : Nummer des zu löschenden Satzes
- -> record-number of record to be deleted
- Dup : s. SatzAendern
- Keys : s. SatzAendern, type KeyProc
- OK : s. SatzAendern
-
- Bitte anschließend IsamOk beachten.
- Fehlermöglichkeiten: s. SatzAendern
- }
-
- procedure DateiOeffnen (var IFBPtr:IsamFileBlockPtr;Name:String;Save:boolean;
- RSize:longint);
- {Öffnet einen Fileblock.
- -> opens fileblock
- IFBPtr : Dateivariable
- Name : Pfad+Vorname der Datei
- -> path and filename of table (without extent!)
-
- Save : TRUE, wenn im Savemodus geöffnet werden soll
- -> true, if open in SAVE-MODE.
- RSize : Datensatzrecordgröße. Dient der Kontrolle, ob Programm- und
- Dateiversion kompatibel sind.
- -> sizeof(record) to reserve enough memory
-
- Bitte anschließend IsamOk beachten.
- Fehlermöglichkeiten wie Open(Save)NetFileBlock.
- }
-
- procedure DateiSchliessen (var IFBPtr:IsamFileBlockPtr);
- {Schließt einen Fileblock.
- -> closes isamfile
-
- IFBPtr : Dateivariable
-
- Bitte anschließend IsamOk beachten.
- Fehlermöglichkeiten wie bei CloseNetFileBlock.
- }
-
- procedure KeySuchen (var IFBPtr:IsamFileBlockPtr;Key:integer;
- var Userdatref:Longint;var Userkey:IsamKeyStr;
- var Found:boolean);
- {Sucht einen Schlüssel.
- -> searches for key.
-
- IFBPtr : Dateivariable
- Key : Schlüsselnummer
- -> keynumber
- UserdatRef : erhält die Datensatznummer des gefundenen Schlüssels
- -> returns recordnumber
- UserKey : zu suchender Schlüssel
- -> key that should be found
- Found : TRUE: gewünschter Schlüssel wurde gefunden.
- -> true, if found
- FALSE: gewünschter Schlüssel wurde nicht gefunden, weil
- -> false, if not found, because:
- IsamOK=TRUE: er nicht existiert. Userkey enthält den nächsten
- größeren Schlüssel.
- -> Key doesn't exist
- IsamOK=FALSE: der Zugriff wegen eines Fehlers nicht durchge-
- führt werden konnte.
- -> a DOSERROR occured
- Bitte anschließend IsamOk beachten.
- Fehlermöglichkeiten wie bei SearchKey.
- }
-
- procedure RefSuchen (var IFBPtr:IsamFileBlockPtr;Key:integer;
- var Userdatref:Longint;var Userkey:IsamKeyStr;
- var Found:boolean);
- {Sucht einen Schlüssel mit Referenz.
- -> searches for key with reference
- IFBPtr : Dateivariable
- Key : Schlüsselnummer
- -> keynumber
- UserdatRef : Datensatznummer des zu suchenden Schlüssels
- -> recordnumber of key that is to be searched for
- UserKey : zu suchender Schlüssel
- -> keystring
- Found : TRUE: gewünschter Schlüssel wurde gefunden.
- -> true, if found
- FALSE: gewünschter Schlüssel wurde nicht gefunden, weil
- -> false, if not found, because ...
- IsamOK=TRUE: er nicht existiert. Userkey enthält den nächsten
- größeren Schlüssel.
- -> Key doesn't exist, Key returns nearest greater key
- IsamOK=FALSE: der Zugriff wegen eines Fehlers nicht durchge-
- führt werden konnte.
- -> a DOSERROR or ISAMERROR occurred
- Bitte anschließend IsamOk beachten.
- }
-
- procedure SatzEinlesen(var IFBPtr:IsamFileBlockPtr;Key:integer;
- var Satz,Dup;Keys:KeyProc;var Klar:boolean);
- {Liest einen Satz ein. Funktionsweise: Die Felder der Variablen "Satz", die
- bekannt sind, müssen vor Aufruf besetzt werden (z.B. das Kundennummernfeld,
- wenn nach einer Kundennummer gesucht werden soll). Diese Prozedur sucht
- dann den passenden Satz und liest ihn ein.
- -> reads a record from isamtable. Function: those fields of the variable
- "SATZ", that are already known, must be declared before, i.e. Name
- or ZIP-Field, matching record will be searched
- IFBPtr : Dateivariable
- Key : Nummer das Schlüssels, anhanddessen gesucht werden soll
- -> Key-Number
- Satz : s.o., erhält hinterher den kompletten Satz
- -> incomplete Record before search, complete record will be returned
- if found
- Dup : s. SatzLesen
- Keys : s. SatzAendern, type KeyProc
- Klar : TRUE, wenn der Satz gefunden und ordnungsgemäß gelesen wurde
- -> true, if found and read without errors
-
- Bitte anschließend IsamOk beachten.
- Fehlermöglichkeiten wie bei SearchKey, GetNetRec.
- }
-
- const
- FindFirst = 0;
- FindLast = 1;
- FindNext = 2;
- FindPrev = 3;
- FindALL = 4;
-
- procedure NachbarKey(var IFBPtr:IsamFileBlockPtr;Key:integer;
- var UserDatRef:longint;var UserKey:IsamKeyStr;
- SuchArt:byte);
- {Sucht den nächsten bzw. vorigen Schlüssel.
- -> skips to next or previous key
-
- IFBPtr : Dateivariable
- Key : Schlüsselnummer -> keynumber
- UserDatRef : erhält die Datensatznummer des gefundenen Schlüssels
- -> returns recordnumber of record found
- UserKey : erhält den gefundenen Schlüssel
- -> returns keystring of record found
- SuchArt : 0=der erste Schlüssel wird gesucht
- -> first key (top of file)
- 1=der letzte Schlüssel wird gesucht
- -> last key (end of file)
- 2=der nächste Schlüssel wird gesucht
- -> next key
- 3=der vorige Schlüssel wird gesucht
- -> previous key
- 4=der erste übereinstimmende Schlüssel (FINDKEY) wird gesucht
- -> first key nearly matching
-
- Bitte anschließend IsamOk beachten.
- Fehlermöglichkeiten wie bei NextKey, PrevKey, ClearKey.
- }
-
-
- procedure DeleteAllRecs(var IFBPtr : IsamFileBlockPtr;
- VonKey,
- BisKey : IsamKeyStr;
- Key : integer;
- Keys : KeyProc);
-
- {Löscht alle Datensätze, die im angegebenen Bereich von Schlüsseln liegen.
- -> deletes all records
-
- IFBPtr : bezogener FileBlock
- VonKey : kleinster Schlüssel, der gelöscht werden soll
- -> lowest key to be deleted
- BisKey : kleinster Schlüssel, der nicht mehr gelöscht werden soll
- (also obere Grenze, bleibt selbst aber erhalten)
- -> highest key to be deleted
- Key : Schlüsselnummer.
- }
- procedure LockFile(Var IFBPtr:IsamFileBlockPtr);
- procedure UnlockFile(var IFBPtr:IsamFileBlockPtr);
- {Achtung: Vor KeysAendern LOCKFILE!!!}
- procedure KeysAendern(var IFBPtr:IsamFileBlockPtr;var Quelle,Dup;
- RefNr:longint;Keys:KeyProc;var OK:boolean);
-
- const ErrorFile:String = '';
-
- var
- NetInUse : boolean;
-
- type
- PrPrTyp = procedure (s:String);
-
- var
- PrPr : PrPrTyp;
-
- const
- IsamAntwort : word = 0;
-
- implementation
-